Cette section vous présentera la base du réseau Linux: comment il est configuré, comment le démarrer, l'arrêter et modifier cette configuration.
2.1 - Les fichiers de configuration du réseau
2.2 - Les services à la base du réseau
2.3 - Modifier sa configuration
2.4 - Modifier son nom de machine (nom d'hôte)
Sachez d'abord que Fedora possède un gestionnaire de réseau appelé NetworkManager qui agit sous forme de service pour gérer de façon automatique et transparente les interfaces et les connexions réseau. C'est certainement plus attirant pour le néophyte ou pour l'usager de base qui utilise son ordinateur à la maison pour aller lire son courriel, mais pour l'administrateur réseau ça l'est un peu moins. En effet, ça signifie que les fichiers de configuration auxquels ils sont habitués risquent d'être réécrit à chaque redémarrage du réseau (et donc de la machine). En plus, qui dit "automatisé et transparent" dit "perte de contrôle" et "difficulté à régler un éventuel bug", ce qui ne plaît généralement pas à un administrateur.
Le fonctionnement du NetworkManager est le suivant: un daemon appelé udev détecte l'arrivée d'un nouveau périphérique au système et il crée une règle pour ce dernier dans /etc/udev/rules.d. Dans le cas d'une carte réseau, il établit ainsi une relation entre la carte physique (par son adresse MAC) et le nom logique "eth0" (ou "eth1", "eth2", etc). udev crée également une entrée pour chaque carte réseau dans /etc/udev/rules.d/70-persistent-net.rules. Le NetworkManager utilise ces entrées pour initialiser les cartes.
NetworkManager réécrit aussi le fichier /etc/resolv.conf (voir plus bas) à chaque fois que le réseau est redémarré. Ce fichier sert à la résolution de noms et cette situation est pratique pour un portable qui change souvent de réseau. Par contre, ça ne l'est pas vraiment pour un ordinateur fixe et ça cause parfois des problèmes, particulièrement parce qu'il s'attend à recevoir les informations de DNS par DHCP.
On peut donc décider (et c'est ce qu'on fera ici) d'éteindre le NetworkManager. Pour ce faire, rien de plus simple:
chkconfig NetworkManager off service NetworkManager stop chkconfig network on service network restartÉvidemment, il faut ensuite s'assurer d'avoir les bons fichiers de configuration aux bons endroits (voir ci-bas). Si ce n'est pas le cas, créez-les et redémarrez le service réseau.
Si jamais vous voulez remettre en place le NetworkManager pour une raison quelconque, vous n'avez qu'à faire les opérations inverses.
Comme pour tout service sur Linux, la configuration du réseau est faite avec des simples fichiers texte. Ces fichiers sont normalement accessibles à tout le monde en lecture mais seul root peut en modifier le contenu.
Les fichiers les plus importants sont:
Configuration de base du réseau - on n'y trouve au départ pas grand chose, mais ce qui y est est fort important. L'option NETWORKING doit évidemment être à "yes" pour que quoi que ce soit puisse se passer. L'option HOSTNAME définit le nom de la machine. Ce nom est utilisé dans le cas d'un serveur avec une adresse IP statique.
Ce répertoire contient un fichier de configuration pour chacune des carte réseau. Ces fichiers commencent tous par "ifcfg-" suivi du nom de l'interface (par défaut, eth suivi d'un nombre, 0 étant le premier). Au minimum, vous devriez trouver le fichier ifcfg-eth0.
On trouvera dans ce fichier toute la configuration IP de base pour l'interface réseau choisie: son nom, son adresse IP, l'adresse de broadcast, le masque de sous réseau, l'adresse de la passerelle (gateway), celle du serveur DNS, l'adresse MAC et quelques autres éléments de configuration. L'option ONBOOT peut être placée à yes ou no pour déterminer si cette carte doit être activée au démarrage de la machine. On s'assurera normalement d'en laisser au moins une à yes.
Ce fichier contient une liste d'adresses IP avec des noms associés. Il agit un peu comme un mini-serveur DNS fixe. On peut y placer les adresses des serveurs avec lesquels on communique souvent et qui ne changeront pratiquement jamais (comme celles des autres serveurs statiques de notre réseau). Ainsi on ne dérangera pas le serveur DNS pour ces requêtes simples. Au minimum, ce fichier devrait contenir une entrée pour 127.0.0.1 avec les alias localhost et localhost.localdomain.
Ce fichier contient la configuration concernant la résolution de noms. Son seul paramètre normalement utilisé est "order" qui est généralement configuré à "hosts,bind" - ce qui signifie "rechercher dans le fichier /etc/hosts d'abord, puis aller vérifier sur le DNS ensuite" (bind est le nom du serveur DNS du monde Linux, mais le fait de spécifier bind dans ce fichier ne signifie pas qu'il faut que notre serveur DNS soit réellement un serveur bind!)
Contient une liste de serveurs DNS. Ce fichier n'a normalement plus besoin d'être modifié manuellement, il devrait se mettre à jour en fonction des valeurs DNS1 et DNS2 que vous placez dans vos fichiers /etc/sysconfig/networking/devices/ifcfg-* (ou équivalent). Toutefois, si jamais un problème survient, on peut aller vérifier son contenu.
Ce répertoire contient plusieurs scripts permettant d'arrêter ou de démarrer les cartes réseau, une étape à la fois. On n'aura normalement jamais besoin de les utiliser directement. Notez que les fichiers de configuration ifcfg-* sont également copiés ici automatiquement.
Ce répertoire servira à contenir des sous-répertoires, chacun d'entre eux correspondant à un profil usager particulier. Il est en effet possible pour chaque usager d'avoir son propre profil réseau (ce qui demeure assez inusité dans le cas d'un serveur étant donné le bas niveau des configurations qui s'y trouvent - c'est toutefois plus utile dans le cas d'un ordinateur portable). Au départ, le profil "default" est le seul qui existe, et il contient la même chose que les autres fichiers de configuration. listés ici.
Lorsque l'on modifie un fichier du profil "default", ces modifications sont automatiquement répliquées dans le fichier correspondant ailleurs sur le système, et vice-versa. Il n'y a donc aucun risque d'incohérence dans les configurations.
Retour à la table des matières de la section
Il existe plusieurs services associés au réseau Linux. Toutefois, le service qui est à la base du tout est network. Si ce service n'est pas en fonction, rien d'autre ne peut fonctionner. Lorsque l'on modifie une configuration reliée au réseau, on devra normalement redémarrer le service network pour qu'elle soit prise en charge:
service network restart
Lorsque le service network démarre, il lira ses fichiers de configuration et utilisera les scripts appropriés pour démarrer toutes les interfaces réseau. On peut également arrêter ou démarrer une seule interface réseau avec les commandes ifup et ifdown:
ifup eth0 ifdown eth1
Le service xinetd (eXtended InetNET Daemon) est un autre service qui se trouve assez bas dans la hiérarchie (toutefois il a besoin que network soit en fonction pour démarrer). xinetd (l'amélioration du vieux inetd des anciennes distributions) est un service qui écoute sur différents ports et qui démarre le bon serveur lorsqu'une demande de connexion est reçue.
La plupart des serveurs fonctionnent maintenant de manière indépendante à xinetd, ce qui explique pourquoi il n'est même pas installé par défaut sur Fedora 9. Pour l'installer, rien de plus simple:
yum install xinetd chkconfig xinetd on service xinetd start
Il est souvent possible de modifier la configuration de serveurs indépendants pour les faire passer à travers xinetd. L'intérêt de cette manoeuvre est que xinetd supporte la notion de TCP Wrapper (enrobage TCP), une façon simple et efficace de sécuriser l'accès à différents serveurs sur notre machine.
Nous verrons xinetd en plus grands détails dans la prochaine section.
Retour à la table des matières de la section
On peut utiliser la commande ifconfig pour voir et modifier sa configuration TCP/IP. La commande est très facile à utiliser. Utilisée seule, elle affiche la configuration de toutes les interfaces réseaux définies (incluant lo - loopback, une boucle qui pointe vers le serveur). On peut voir uniquement une interface en donnant son nom en paramètre:
ifconfig eth0
Pour modifier la configuration, on doit spécifier l'interface d'abord, l'adresse IP, puis les paramètres à modifier suivis de leurs valeurs. Par exemple:
ifconfig eth0 192.168.0.10 netmask 255.255.255.0 broadcast 192.168.0.255
Évidemment, tout est optionnel, on ne modifie que ce que l'on veut.
Retour à la table des matières de la section
La commande ifconfig ne permet pas de faire passer une interface statique à un mode dynamique. Pour ce faire, il faut utiliser dhclient:
dhclient eth0
démarre le client DHCP et les interfaces actuellement en fonction passent au mode dynamique.
dhclient -r eth0
fait un release sur l'adresse reçue du serveur DHCP et termine le processus dhclient. Il faut alors le démarrer de nouveau (ce qui équivaut à un renew, puisqu'on obtiendra une nouvelle adresse IP) ou, si on veut retourner au mode statique, simplement redémarrer l'interface (on suppose qu'elle est configurée en mode statique):
ifup eth0
On peut également terminer dhclient sans "relâcher" l'adresse au serveur DHCP (ce qui ne change souvent pas grand chose) avec:
dhclient -x eth0
Retour à la table des matières de la section
2.3.2 - La persistance de la mémoire
Il ne faut pas oublier que toute modification faite avec la commande ifconfig n'est que temporaire (donc bonne jusqu'au redémarrage de la machine). Pour rendre le tout permanent, on peut ajouter la commande ifconfig à /etc/rc.d/rc.local ou (mieux) modifier le fichier de configuration de l'interface (/etc/sysconfig/networking/devices/ifcfg-eth0 par exemple). Les paramètres les plus utiles dans ce fichier sont:
# Le nom de la carte DEVICE=eth0 # Le protocole utilisé. Les valeurs possibles sont static, dhcp ou none BOOTPROTO=none # Adresse de broadcast BROADCAST=192.168.0.255 # Adresse MAC HWADDR=00:e0:18:7f:5b:d6 # Adresse IP IPADDR=192.168.0.100 # Masque de sous-réseau NETMASK=255.255.255.0 # Adresse du réseau NETWORK=192.168.0.0 # Démarrage automatique de la carte (yes ou no) ONBOOT=yes # Adresse du premier serveur DNS (on peut en avoir jusqu'à 3) DNS1=192.168.0.160 # Adresse de la passerelle GATEWAY=192.168.0.160 TYPE=Ethernet
On peut également utiliser l'outil graphique system-config-network qui est assez intuitif et qui modifie ultimement les fichiers pour nous. Il existe en version graphique (system-config-network-gui) et texte (system-config-network-tui). Si on appelle simplement system-config-network, la version appropriée sera lancée pour nous.
(notez en passant que taper system-config- suivi de <TAB> <TAB> vous affichera la liste des programmes de configuration système, qui commencent tous par le même préfixe, question de simplicité).
Retour à la table des matières de la section
Vous aurez peut-être remarqué qu'on ne peut pas modifier la passerelle avec ifconfig. Il faut pour cela utiliser la commande route qui permet de jouer avec la table de routage.
route -n
affiche la table de routage actuelle (l'option -n demande de ne pas contacter le DNS pour trouver les noms des réseaux). Normalement, la dernière ligne devrait ressembler à:
Destination Passerelle Genmask Indic Metric Ref Use Iface default 192.168.0.160 0.0.0.0 UG 0 0 0 eth0
Ceci signifie que pour toutes les adresses qui n'ont pas été routées ailleurs (0.0.0.0), on utilisera la passerelle 192.168.0.100 (ou autre chose chez vous!). Le champ "Indicateur" contient UG, ce qui signifie "la route est active" (U = up) et "est utilisée comme passerelle" (G = gateway).
Si cette ligne n'existe pas et qu'on est derrière un routeur, il faudra la rajouter en faisant:
route add default gateway 192.168.0.160 dev eth0
Si on veut la modifier, on n'a pas d'autre choix que de l'effacer et de la rajouter - route ne permet pas la modification directe d'une ligne:
route del default gateway 192.168.0.160 dev eth0 route add default gateway 192.168.0.1 dev eth0
Nous reviendrons sur le routage plus tard dans la session.
Retour à la table des matières de la section
La définition du proxy est faite tout simplement dans des variables d'environnement, qu'il suffit de modifier et d'exporter:
export http_proxy=10.10.10.10:8080 export ftp_proxy=10.10.10.10:8080
Ces variables ont bel et bien un nom en minuscules, malgré la convention. Notez qu'il existe également les variables gopher_proxy et wais_proxy qui ne sont plus très souvent utilisées de nos jours.
Évidemment, comme pour toute définition de variables, elles ne sont valables que dans la session en cours. Normalement vous devriez être en mesure de vous arranger pour rendre cela permanent...
Retour à la table des matières de la section
Pour modifier le nom du serveur, on doit d'abord utiliser la commande hostname:
hostname nouveau_nom
Ensuite, il faut changer la valeur de HOSTNAME dans le fichier /etc/sysconfig/network afin que les processus réseau soient informés du changement.
Finalement, il ne faut pas oublier de changer /etc/hosts pour qu'on puisse utiliser le nom de la machine à la place de son adresse. (Il n'est pas nécessaire de modifier 127.0.0.1 qui devrait continuer à s'appeler localhost).
Pour que les changements soient pris en compte, il faut redémarrer les services qui dépendent du nom de l'hôte (le réseau et X-Windows):
service network restart telinit 3 telinit 5
Retour à la table des matières de la section